/**
 * router.js 路由模块
 * 职责：
 *   处理路由
 *   根据不同的请求方法+请求路径设置具体的请求处理函数
 * 模块职责要单一，不要乱写
 * 我们划分模块的目的就是为了增强项目代码的可维护性
 * 提升开发效率
 */
console.log('========');
 var fs = require('fs');
 var Student = require('./student');
 
 // Express 提供了一种更好的方式
 // 专门用来包装路由的
 var express = require('express')
 
 // 1. 创建一个路由容器
 var router = express.Router()
 
 // 2. 把路由都挂载到 router 路由容器中
 
 /*
  * 渲染学生列表页面
  */
 router.get('/students', function (req, res) {
   Student.find(function (err, students) {
     if (err) {
       return res.status(500).send('Server error.')
     }
     res.render('index.html', {
       fruits: [
         '苹果',
         '香蕉',
         '橘子'
       ],
       students: students
     })
   })
 })
 
 /*
  * 渲染添加学生页面
  */
 router.get('/students/new', function (req, res) {
   res.render('new.html')
 })
 
 /*
  * 处理添加学生
  */
 router.post('/students/new', function (req, res) {
   // 1. 获取表单数据
   // 2. 处理
   //    将数据保存到 db.json 文件中用以持久化
   // 3. 发送响应
   Student.save(req.body, function (err) {
     if (err) {
       return res.status(500).send('Server error.')
     }
     res.redirect('/students')
   })
 })
 
 /*
  * 渲染编辑学生页面
  */
 router.get('/students/edit', function (req, res) {
   // 1. 在客户端的列表页中处理链接问题（需要有 id 参数）
   // 2. 获取要编辑的学生 id
   // 
   // 3. 渲染编辑页面
   //    根据 id 把学生信息查出来
   //    使用模板引擎渲染页面
 
   Student.findById(parseInt(req.query.id), function (err, student) {
     if (err) {
       return res.status(500).send('Server error.')
     }
     res.render('edit.html', {
       student: student
     })
   })
 })
 
 /*
  * 处理编辑学生
  */
 router.post('/students/edit', function (req, res) {
   // 1. 获取表单数据
   //    req.body
   // 2. 更新
   //    Student.updateById()
   // 3. 发送响应
   Student.updateById(req.body, function (err) {
     if (err) {
       return res.status(500).send('Server error.')
     }
     res.redirect('/students')
   })
 })
 
 /*
  * 处理删除学生
  */
 router.get('/students/delete', function (req, res) {
   // 1. 获取要删除的 id
   // 2. 根据 id 执行删除操作
   // 3. 根据操作结果发送响应数据
 
   Student.deleteById(req.query.id, function (err) {
     if (err) {
       return res.status(500).send('Server error.')
     }
     res.redirect('/students')
   })

   // Express 对于没有设定的请求路径，默认会返回 Cat not get xxx
    // 如果你想要定制这个 404
    // 需要通过中间件来配置
    // 咱们讲中间件的时候说一下如何处理

    // 只需要在自己的路由之后增加一个
    app.use(function (req, res) {
        // 所有未处理的请求路径都会跑到这里
        // 404
    })
  
 })
 
 // 3. 把 router 导出
 module.exports = router
 
 